# Тестовый файл Math#

# типы переменных
#   int, float, string, bool - базовые типы
#   array, dictionary        - масивы
#   struct                   - структуры данных (классы?)
#   cube                     - многомерные данные как внешний источник
#   key-value				 - связка ключ-значение (для описания измерений кубов)
# любая переменная начинается со знака $. Если объявление начинается не с $,
# то считается что идёт типизированное объявление

# вводим таблицу приоритетов оператров
declare priority + 4
declare priority - 4
declare priority * 3
declare priority / 3
declare priority % 3

# синаксис испольняемого declare
# declare [operator|function] {name/operation} ([{arguments}]) as {declare-type}
#   {arguments}: {argument}[, {argument}]
#   {argument}: [{varible-type}] ${varible-name}
#   {varible-type}: int|float|string|bool|array|dictionary|struct|cube
#   {varible-type-arg}: имя типа
#   {varible-name}: имя по правилам C#
#   {declare-type}: csharp|msharp|external [{external-api}] {ext-func-name}|]native {ext-func-name}
#   {external-api}: выриант синтаксиса функции C# для подключения
#                   API-1: public static Value FuncName(Namespace namespace, Varible a, Varible b...)
declare operator + (int $a, int $b) as external MathSharp.Externals.Math.BaseOperations:Add
declare operator - (int $a, int $b) as external MathSharp.Externals.Math.BaseOperations:Sub
declare operator * (int $a, int $b) as external MathSharp.Externals.Math.BaseOperations:Mul
declare operator / (int $a, int $b) as external MathSharp.Externals.Math.BaseOperations:Div
declare operator % (int $a, int $b) as external MathSharp.Externals.Math.BaseOperations:Mod

declare function pow2(int $a) as msharp
	return $a * $a
